package com.sy.simpleegg.ui.dialog

import android.annotation.SuppressLint
import android.content.Context
import android.content.DialogInterface
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.recyclerview.widget.GridLayoutManager
import com.sy.simpleegg.R
import com.sy.simpleegg.adapter.PayTypeAdapter
import com.sy.simpleegg.bean.GoodBean
import com.sy.simpleegg.bean.PayTypeData
import com.sy.simpleegg.databinding.DialogPayTypeBinding
import com.sy.simpleegg.ext.countDown
import com.sy.simpleegg.ext.logFile
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.cancel


class PayTypeDialog(
    private val title: String?,
    private val tips: String?,
    private val payTypeList: MutableList<PayTypeData>,
    private val goodBean: GoodBean,
    private val countDownTime: Int,
    private var payTypeDialogListener: PayTypeDialogListener,
): DialogFragment() {

    private lateinit var binding: DialogPayTypeBinding

    var timeDownScope: CoroutineScope? = null

    override fun onStart() {
        super.onStart()
//        dialog!!.window!!.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

        val width = resources.getDimensionPixelSize(R.dimen.dialog_paytype_width)
        val height = resources.getDimensionPixelSize(R.dimen.dialog_paytype_height)
//        val marginBottom = resources.getDimensionPixelSize(R.dimen.dialog_good_detail_margin_bottom)

//        dialog!!.window!!.setLayout(width, height + marginBottom)
        dialog!!.window!!.setLayout(width, height)
        dialog!!.window!!.setGravity(Gravity.CENTER)
        dialog!!.setCanceledOnTouchOutside(false)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View? {
        binding = DialogPayTypeBinding.inflate(inflater, container, false)
//        setStyle(STYLE_NO_TITLE, R.style.MyDialog)
//        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT))
//        dialog!!.window!!.setGravity(Gravity.BOTTOM)
        dialog!!.window!!.setBackgroundDrawableResource(R.color.transparent)
//        var wlp = dialog!!.window!!.attributes
//        wlp.gravity = Gravity.BOTTOM
//        wlp.width = WindowManager.LayoutParams.MATCH_PARENT
//        wlp.height = WindowManager.LayoutParams.MATCH_PARENT
//        dialog!!.window!!.attributes = wlp

        return binding.root
    }

    @SuppressLint("SetTextI18n")
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        try {
            binding.tvQrCodeTitle.text = title
            binding.tvTips.text = tips
            binding.layoutClose.tvDismiss.text = "${countDownTime}S"

            binding.layoutClose.tvClose.setOnClickListener {
                payTypeDialogListener.back()
                dismissAllowingStateLoss()
            }
            binding.btnDismiss.setOnClickListener {
                payTypeDialogListener.back()
                dismissAllowingStateLoss()
            }

            binding.rvPayType.layoutManager = GridLayoutManager(requireContext(), 3)
            binding.rvPayType.adapter = PayTypeAdapter(requireContext(), payTypeList).apply { setOnItemClickListener(object : PayTypeAdapter.OnItemClickListener{
                override fun onClick(payTypaData: PayTypeData?) {
                    payTypaData?.let {
                        payTypeDialogListener.selectPayType(it, goodBean)
                        dismissAllowingStateLoss()
                    }
                }
            }) }
        }catch (e: Exception){
            e.printStackTrace()
            logFile("初始化页面异常：${e.message}")
        }
    }

    override fun showNow(manager: FragmentManager, tag: String?) {
        super.showNow(manager, tag)
        startCountDown(countDownTime)
    }

    override fun show(manager: FragmentManager, tag: String?) {
        super.show(manager, tag)
        startCountDown(countDownTime)
    }

    override fun show(transaction: FragmentTransaction, tag: String?): Int {
        val result = super.show(transaction, tag)
        startCountDown(countDownTime)
        return result

    }

    override fun onDismiss(dialog: DialogInterface) {
        super.onDismiss(dialog)
        payTypeDialogListener.dismiss()
    }

    @SuppressLint("SetTextI18n")
    private fun startCountDown(timeout: Int){
//        var timeDownScope: CoroutineScope? = null
        timeDownScope?.cancel()

        countDown(
            time = countDownTime,
            start = {
                timeDownScope = it
                logFile("开始倒计时")
            },
            end = {
                logFile("结束倒计时")
            },
            next = {
                binding.layoutClose.tvDismiss.text = "${it}S"
                if (it == 0){
                    dismissAllowingStateLoss()
                }
            })
    }

    interface PayTypeDialogListener{
        fun dismiss()

        fun back()

        fun selectPayType(payTypeData: PayTypeData, goodBean: GoodBean)
    }

    fun dpToPx(context: Context, dp: Int): Int {
        val density = context.resources.displayMetrics.density
        return Math.round(dp * density)
    }
}